Wir illustrieren die wichtigsten Phasen der Anwendungsentwicklung an einem stark vereinfachten Beispiel, dem Modul Monatliche Ausleihstatistik eines Projekts Bibliotheksanwendung.
Ausgangspunkt des Projektbeispiels sei die folgende Grobspezifikation:
Entwickeln Sie ein Modul, das eine Ausleihestatistik erstellt und wie folgt auf dem Bildschirm ausgibt:
AUSLEIHSTATISTIK FÜR DEN MONAT F E B R U A R Fachgebiet Ausgeliehene Titel BWL *************************************** VWL *********************************** RECHT **************************** SOZ./PSYCH. ************ ÜBRIGE ***************
Diese Grobspezifikation ist ungenau, weil sie Fragen nach der Benutzereingabe und der Ausgabeberechnung offen lässt. Eine feinere Spezifikation des Moduls Monatliche Ausleihstatistik könnte wie folgt aussehen:
Zweck
Zweck des Moduls ist die Bildschirmausgabe eines Histogramms (Balkendiagramms) der Ausleihhäufigkeiten in den Fachgebieten Betriebswirtschaftslehre (BWL), Volkswirtschaftslehre (VWL), Recht, Soziologie/Psychologie und Übrige.
Eingabe
Tastatureingaben sind die Ausleihhäufigkeiten der folgenden Fachgebiete: BWL, VWL, Oeffentliches Recht, Privates Recht, Soziologie, Psychologie und Übrige. Der Ausleihmonat wird als Zahl zwischen 1 bis 12 eingegeben.
Verarbeitung und -ausgabe
Das Histogramm visualisiert die relativen Ausleihhäufigkeiten der Fachgebiete BWL, VWL, Recht, Soziologie/Psychologie und Übrige. Die maximale Balkenlänge wird der grössten Häufigkeit zugeordnet. Die Häufigkeiten werden durch proportionale Balken aus dem Zeichen * dargestellt.
Ein Modul ist ein entwurfs- oder programmiersprachlicher Baustein, der Aufgaben löst, die eng verbunden sind. Ein einfaches Programmpaket zur Bibliotheksverwaltung lässt sich entwurfssprachlich wie folgt modularisieren:
Bibliotheksverwaltung Ausleihverkehr buchen Stammdaten verwalten Dokumente verwalten Benutzer verwalten Statistiken erstellen Dokumentestatistiken ... Monatliche Ausleihstatistik ... Benutzerstatistiken ... ...
Die Beziehung zwischen den Modulen ist hierarchisch. Eingerückte Module gehören zu den weiter oben ausgerückten Modulen. Dokumente verwalten gehört zum Beispiel zu den Vatermodulen Stammdaten verwalten und Ausleihverkehr buchen. Eine solche Einrückungsliste von Modulen nennt man Modulhierarchie. Die obige Modulhierarchie ist unvollständig. Wir werden ausserdem nur eines der dargestellten Teilprobleme vertiefen, nämlich das Modul Monatliche Ausleihstatistik.
Zu Beginn der Spezifikation und des Entwurfs hilft oft das EVA-Prinzip. Es zerlegt die Modulaufgaben in Eingabe, Verarbeitung und Ausgabe:
Eingabe: Ausleihhäufigkeiten und -monat einlesen
Verarbeitung: Ausgabe des Histogramms vorbereiten
Ausgabe: Histogramm auf dem Bildschirm ausgeben
Als Nächstes verfeinern wir jeden EVA-Schritt in einer Einrückungsliste:
Ausleihhäufigkeiten und -monat einlesen Programmtitel ausgeben Für jede Ausleihhäufigkeit: Prompt "Ausleihhäufigkeit" Ausleihhäufigkeit lesen Ausleihhäufigkeit prüfen Prompt "Ausleihmonat" Monatszahl lesen Monatszahl prüfen Ausgabe des Histogramms vorbereiten Maximale Häufigkeit ermitteln Histogramm auf dem Bildschirm ausgeben Ausgabetitel ausgeben Spaltenbezeichner ausgeben Für jede Ausgabehäufigkeit: Zeilenbezeichner ausgeben Balken ausgeben
Wir haben diese EVA-Verfeinerung in Pseudocode beschrieben. Pseudocode (auch Entwurfscode genannt) abstrahiert vom späteren Programmcode und umfasst deshalb wesentlich weniger Zeilen. Ausserdem ist die Syntax von Pseudocode einfacher als jene von Programmcode.
Eine Endbenutzerin kann Software an ihre Bedürfnisse anpassen, ohne gleich Code zu schreiben. Verbreitete Möglichkeiten der Anpassung (engl. customization) sind Vorlagen und Makros. Vorlagen (engl. templates) spielen vor allem in der Textverarbeitung und Tabellenkalkulation eine Rolle. Ein Textverarbeitungspaket erlaubt zum Beispiel die Definition von Textvorlagen aus Konstanten und Variablen (Leerstellen oder Platzhalter). Der Ersteller eines Serienbriefs verknüpft zum Beispiel die Platzhalter einer Vorlage mit Feldern einer Datenbank. Das Textverarbeitungsprogramm kann dann zum Beispiel aktuelle Adressdaten abrufen und vor dem Druck mit der Vorlage verknüpfen. In Serienbriefen sind neben der Adresse die Anrede und die Grussformel verbreitete Platzhalter.
Verlangt das Ausfüllen einer Vorlage viele manuelle Arbeitsschritte, so kann der Endbenutzer eine Folge von Tasten- und Mausaktionen als Makro aufzeichnen und später beliebig oft abspielen. Oft ist ein Makro der erste Schritt zur Entwicklung eines eigenen Programms. Excel und Access erlauben den Ausbau von Makros zu VBA-Programmen. Ein Makro automatisiert eine kleine Routineaufgabe, indem es mehrere Aktionen aufzeichnet und unter einem Namen zusammenfasst. In einfachen Editoren fehlt zum Beispiel oft eine Funktion, die den Text einer Zeile automatisch unterstreicht. Der Benutzer kann in diesem Fall den Makrorekorder einschalten, den Titel manuell unterstreichen und dann die Aufzeichnung beenden. Das generierte Makroprogramm kann der Benutzer zum Beispiel Unterstreiche_die_laufende_Zeile nennen:
Macro Unterstreiche_die_laufende_Zeile JumpToBeginningOfNextLine For LineLength Times Write ‘-’ End Macro
Der Code aufgezeichneter Makroprogramme lässt sich nachträglich anpassen. In unserem Beispiel kann der Benutzer etwa das Unterstreichungszeichen '-' durch '*' ersetzen. Wer über Programmierkenntnisse verfügt, kann das Makro auch als Grundlage eines eigenen Programms verwenden. Das obige Makro enthält bereits die wichtigsten Elemente von Programmen:
Es fasst mehrere zusammengehörende Aktionen in einem benannten Baustein zusammen.
Die Reihenfolge der Aktionen ist von Bedeutung.
Einige Aktionen werden wiederholt. Das Beispiel wiederholt LineLength-mal die Aktion Schreibe -.
Wir verfeinern nur einen kleinen Teil der Algorithmisierungsphase, nämlich die Datenstruktur und den Ablauf des Untermoduls Maximale Häufigkeit ermitteln. Eine Struktur, die eine Liste gleichartiger Daten speichert, heisst Datenfeld (engl. array). Das folgende Datenfeld heisst Ausleihäufigkeiten und speichert die Ausleihhäufigkeiten der ausgeliehenen Bücher:
|
i |
1 |
2 |
3 |
4 |
5 |
|
Ausleihhäufigkeiten |
200 |
100 |
500 |
300 |
400 |
|
(Fach |
BWL |
VWL |
Recht |
Psych./Soz. |
Übrige) |
Der Befehl Ausleihhäufigkeiten(i) greift auf die i-te Zelle des Datenfelds Ausleihhäufigkeiten zu. Der folgende VBA-Code geht durch alle Werte dieses Datenfelds und ermittelt die maximale Ausleihhäufigkeit. Wir benötigen diese für die Berechnung der Balkenlängen des Histogramms. Im Gegensatz zum Entwurfscode der Algorithmisierungsphase kann VBA-Code von einem Rechner ausgeführt werden:
Maximum = Ausleihhäufigkeiten(1) For i = 2 To 5 If Ausleihhäufigkeiten(i) > Maximum Then Maximum = Ausleihhäufigkeiten(i) End If Next i
Die erste Zeile weist einer Speicherzelle Maximum die Ausleihhäufigkeit von BWL zu. Die restlichen Zeilen lesen nacheinander die Elemente 2 bis 5 von Ausleihhäufigkeiten. Die Zeile nach Then überschreibt die Speicherzelle Maximum mit dem laufenden Element, sobald dieses grösser als der bisherige Inhalt von Maximum ist (Das Symbol = vergleicht also hier nicht zwei Werte, sondern überschreibt den Wert der Speicherzelle Maximum mit dem Wert von Ausleihhäufigkeit(i)). Nach dem Lesen aller Elemente des Datenfelds steht in Maximum die grösste Ausleihhäufigkeit. Ein vollständiges VBA-Programm zur Bestimmung des Maximums finden Sie in Maximum.xls.
Der Abschnitt Codierungsphase hat die Programmkonzepte Datenfeld, Entscheidung und Wiederholung eingeführt. Die folgenden Themen vertiefen diese Konzepte in VBA:
Datenfeld (Ausleihhäufigkeit)
Entscheidungsanweisung (If ... Then)
Wiederholungsanweisung (For ... Next).
Exkurs zur gegenseitigen Beeinflussung von Entwicklungsphasen
Die Codierung hängt von der Spezifikation, dem Dialogentwurf, der Modularisierung und der Algorithmisierung ab. Idealerweise sollten die vorgelagerten Phasen aber nicht von späteren Implementationseinschränkungen beeinflusst werden. Leider sieht die Praxis aber oft anders aus - vor allem dann, wenn sich der spätere Programmcode auf mehrere Plattformen verteilt. Beispiele sind Anwendungen, die Clientrechner über das Internet mit Server-Datenbanken verbinden:
Der Code der Benutzerschnittstelle liegt auf den Clients
Codebibliotheken liegen auf Client- und Serverrechnern (ActiveX-Controls und Java Applets)
Der Code für die Webkommunikation liegt auf Client- und Serverrechnern (DHTML und Active Server Pages (ASP)
Der Datenbankcode liegt auf Serverrechnern (gespeicherte Prozeduren).
In einem solchen Fall ist es unumgänglich,
bereits in den vorgelagerten Phasen an die spätere Codierung zu denken.